package com.cskaoyan.javase.exception._1handle._1catch;

/**
 * @description: 多分支的try...catch的使用
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 多分支的try...catch的使用就像多分支的if...else,效果是类似的
 * 它的语法是:
 *      try {
 *       //可能出现异常的，正常的代码逻辑
 *      } catch(要捕捉的异常对象1) {
 *       //每一个catch分支对应一个异常处理器
 *       //在catch分支中处理具体类型的代码异常
 *      }catch(要捕捉的异常对象2) {
 *       //每一个catch分支对应一个异常处理器
 *       //在catch分支中处理具体类型的代码异常
 *      }
 *
 * 解释:
 *      1.类似于if多分支,一旦try中抛出异常对象,会按照从上到下的顺序逐个匹配,只要匹配上了就执行对应的代码块
 *          如果匹配不上就不会执行任何代码,异常仍然做默认处理
 *      2.如果多分支中出现父类异常的匹配,应该放在最后面,起着通配的作用,起着兜底,接盘的做法
 *          实际开发中可以在多分支的最后一个分支中写匹配Exception,这就相当于if多分支的最后一个else
 *
 */
public class Demo2 {
    public static void main(String[] args) {
        int[] arr = new int[3];
        //java当中的一些常见结构,可以使用快捷键ctrl+alt+t快速生成,首先需要选中一些代码
        System.out.println("before");
        try {
            System.out.println(arr[10]);
            System.out.println(10/0);
        } catch (ArithmeticException e) {
            e.printStackTrace();
        } catch (NullPointerException e){ //'catch' branch identical to 'ArithmeticException' branch
            e.printStackTrace();
            System.out.println();
        } catch (ArrayIndexOutOfBoundsException e){
            e.printStackTrace();
        }catch (Exception e){
            System.out.println("产生了异常");
        }
        System.out.println("after");
    }
}
